package view;

import com.wedu.entity.User;
import com.wedu.service.UserService;
import com.wedu.service.impl.UserServiceImpl;
import com.wedu.util.TSUtility;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Login {
    private static UserService userService=new UserServiceImpl();
    private static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
        TSUtility.loadSpecialEffects();
        //初始化页面
        View.login();
        while (true){
            char a=TSUtility.readMenuSelection();
            switch (a){
                case '1':
                    //注册
                    register();
                    break;
                case '2':
                    //登录
                    login();
                    break;
                case '3':
                    //忘记密码
                    forgetPassword();
                    break;
                case '4':
                    System.out.print("你确定要退出系统吗？请输入（Y/N）：");
                    char b=TSUtility.readConfirmSelection();
                    TSUtility.loadSpecialEffects();
                    if (b=='Y'||b=='y'){
                        System.out.println("退出成功！欢迎下次使用！");
                        System.exit(0);
                    }else {
                        System.out.println("你选择了NO，未退出系统，欢迎继续使用！");
                        //初始化功能展示
                        View.login();
                        break;
                    }
            }
        }
    }
    //注册
    static void register() {
        //注册初始化
        View.registerView();
        while (true){
            char c=TSUtility.readMenuSelection3();
            switch (c){
                //用户编号自动生成六位
                case '1':
                    //兼职人员注册
                    //兼职人员的用户编号自动生成1开头
                    moonlightRegister(c);
                    View.registerView();
                    break;
                /*case '2':
                    //管理人员注册
                    //管理人员的用户编号自动生成0开头
                    moonlightRegister(c);
                    break;*/
                case '2':
                    TSUtility.loadSpecialEffects();
                    //初始化功能展示
                    View.login();
                    return;
            }
        }
    }
    public static void moonlightRegister(char c){
        System.out.print("请输入你的学号或教师编号：");
        String uid=sc.next();
        System.out.print("请输入你的姓名：");
        String name=sc.next();
        boolean flat1=userService.uid_t(uid,name);
        if (!flat1){
            System.out.println("你不是校内人员不能进行改操作！");
            return;
        }
        boolean flat = userService.name_t(uid);
        if (flat){
            System.out.println("你已注册！请勿重复操作！");
            return;
        }
        System.out.print("请输入你的密码：");
        String password=sc.next();
        int age = 0;
        for (;;) {
            System.out.print("请输入你的年龄(18~60)：");
            try {
                age = Integer.parseInt(sc.next());
                if (age<18||age>60){
                    System.out.println("请正确输入年龄！");
                }else break;
            } catch (Exception e) {
                System.out.println("请正确输入年龄！");
            }
        }
        String sex;
        do {
            System.out.print("请输入你的性别（男|女）：");
            sex = sc.next();
        } while (!sex.equals("男") && !sex.equals("女"));
        System.out.print("请输入你的联系电话（11位）：");
        String phone;
        for (;;) {
            phone= sc.next();
            if (phone.length()!=11){
                System.out.print("电话长度不正确！请重新输入：");
            }else break;
        }
        System.out.print("请输入你所在院校：");
        String department=sc.next();
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String date = sdf.format(d);//注册日期
        String acid=acid(c);//自动生成用户编号
        User user=new User();
        user.setUid(uid);
        user.setName(name);
        user.setPassword(password);
        user.setAge(age);
        user.setSex(sex);
        user.setPhone(phone);
        user.setDepartment(department);
        user.setDate(date);
        user.setACID(acid);
        boolean addUser = userService.addUser(user);
        if (addUser){
            System.out.println("你的用户编号为："+acid);
            System.out.println("注册成功！\n");
        }else {
            System.out.println("注册失败！");
        }
    }
    //用户编号不能重复
    public static String acid(char c){
        Random r = new Random();
        StringBuilder s= new StringBuilder();
        int in=0;//兼职人员的用户编号自动生成1开头,管理员0开头
        if (c=='1')
            in=1;
        if (c<='2')
            s.append(in);
        while (true) {
            if (c<='2') {
                for (int i = 0; i < 5; i++) {
                    String Acid = String.valueOf(r.nextInt(10));
                    s.append(Acid);
                }
            }else {
                for (int i = 0; i < 6; i++) {
                    String Acid = String.valueOf(r.nextInt(10));
                    s.append(Acid);
                    if (i==0){
                        if (s.toString().equals("0")||s.toString().equals("1")){
                            s.delete(0,1);
                            i--;
                        }
                    }
                }
            }
            boolean flag=userService.acid(s.toString());
            if (flag){
                s.delete(1,6);
            }else {
                return s.toString();
            }
        }
    }
    //忘记密码
    static void forgetPassword(){
        System.out.print("请输入你的学号或者账户编号：");
        String id=sc.next();
        System.out.print("请输入你的姓名：");
        String name=sc.next();
        boolean flat = userService.name_t(id, name);
        if (!flat){
            System.out.println("你输入的账号不存在或账号姓名不正确！");
            View.login();
            return;
        }
        System.out.print("请输入新的密码：");
        String password=sc.next();
        boolean b = userService.password(id, password);
        if (b){
            System.out.println("找回密码成功！请前往登录");
        }else {
            System.out.println("找回密码失败！");
        }
        //初始化功能展示
        View.login();
    }
    //登录
    static void login(){

        System.out.println("******************************");
        System.out.println("******                    ****");
        System.out.println("******     用户登录页面    ****");
        System.out.println("******                    ****");
        System.out.println("******************************");
        System.out.print("请输入帐户编号或者学号（教师编号）：");
        String id=sc.next();
        System.out.print("请输入密码：");
        String password=sc.next();
        boolean flag = userService.name_t(id);
        if (!flag){
            System.out.println("你输入的账号不存在！");
            View.login();
            return;
        }
        User user = userService.login_t(id, password);
        if (user==null){
            View.login();
            return;
        }
        int index=user.getIndex();
        for (;;) {
            if (!user.getPassword().equals(password)) {
                index--;
                if (index==0){
                    System.out.println("你的登录次数已使用完，请找回密码！");
                    userService.login_index(index,id);
                    View.login();
                    return;
                }
                System.out.println("你输入的密码不正确！你还有"+index+"次机会");
                System.out.print("请输入密码：");
                password=sc.next();
            }else {
                String s=user.getACID().substring(0,1);
                if (s.equals("0")) {
                    Manager_menu.manager_menu(user,userService);
                    View.login();
                    return;
                }else if(s.equals("1")){
                    //兼职人员
                    Part_time_menu.Part_timeStaffMenu(user,userService);
                    View.login();
                    return;
                }else {
                    Post_part_time_staff.post_part_time_staff(user,userService);
                    View.login();
                    return;
                }
            }
        }
    }
}
